#pragma once
#include "producta.h"
#include "productb.h"
#include <memory>

class AbstractFactory {
public:
	virtual ~AbstractFactory() {};
	virtual std::shared_ptr<AbstractProductA> CreatProductA()const = 0;
	virtual std::shared_ptr<AbstractProductB> CreatProductB()const = 0;
};

class Factor1:public AbstractFactory
{
public:
	std::shared_ptr<AbstractProductA> CreatProductA()const;
	std::shared_ptr<AbstractProductB> CreatProductB()const;
};

class Factor2 :public AbstractFactory
{
public:
	std::shared_ptr<AbstractProductA> CreatProductA()const;
	std::shared_ptr<AbstractProductB> CreatProductB()const;
};

class Factor3 :public AbstractFactory
{
public:
	std::shared_ptr<AbstractProductA> CreatProductA()const;
	std::shared_ptr<AbstractProductB> CreatProductB()const;
};
